package lu.med.praxiswahl.wahlumed.client.formdesigner;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * 
 * @author Lars Holger Roth
 */
@SuppressWarnings("serial")
public class FormDesignerViewList extends JPanel implements
	FormDesignerModelListener, ActionListener
{
    private FormDesignerModel model;
    private DefaultListModel listModel;
    private JList list;

    public FormDesignerViewList(FormDesignerModel model)
    {
	/*
	 * Enthält eine JList, die entsprechend der vorhandenen Objekte im
	 * Modell gefüllt wird, sowie Buttons zum Bearbeiten und Löschen von
	 * bereits vorhandenen Objekten
	 */
	this.model = model;
	model.addListener(this);
	this.setLayout(new BorderLayout());

	listModel = new DefaultListModel();
	list = new JList(listModel);
	this.add(list, BorderLayout.CENTER);

	JPanel buttonPanel = new JPanel(new GridLayout(0, 2));
	JButton b1, b2;
	b1 = new JButton("Bearbeiten");
	b2 = new JButton("Löschen");
	b1.addActionListener(this);
	b2.addActionListener(this);
	buttonPanel.add(b1);
	buttonPanel.add(b2);
	this.add(buttonPanel, BorderLayout.SOUTH);

	this.setBorder(BorderFactory.createTitledBorder("Objekte"));
	this.setPreferredSize(new Dimension(200, 0));

    }

    public void actionPerformed(ActionEvent e)
    {
	if (e.getActionCommand().equals("Bearbeiten"))
	{
	    if (list.getSelectedIndex() == -1)
		return;
	    String nPos = JOptionPane
		    .showInputDialog("Geben Sie die neue Koordinate ein:");
	    int nP = Integer.parseInt(nPos);
	    ArrayList<FormDesignerObject> o = model.getObjects();
	    o.get(list.getSelectedIndex()).setPos(nP);
	    model.fireModelChanged();
	}
	if (e.getActionCommand().equals("Löschen"))
	{
	    if (list.getSelectedIndex() == -1)
		return;
	    model.deleteObject(list.getSelectedIndex());
	}
    }

    public void modelChanged()
    {
	// Muss die Liste neu auffüllen
	ArrayList<FormDesignerObject> o = model.getObjects();
	listModel.clear();
	for (int i = 0; i < o.size(); i++)
	{
	    listModel.add(i, o.get(i));
	}
    }
}
